<?php
class Utilisateurs extends Table//************************************************************
{	       
    // Ecrit le tableau des utilisateurs actifs
    public static function Tableau($db)//-------------------------------------------------
    {
        $sql="SELECT uti_id, uti_code, uti_nom, uti_prenom, uti_email".
            ' FROM utilisateurs'.
            ' WHERE uti_actif=TRUE';
        $champs = array ('uti_code', 'uti_nom', 'uti_email');
        $msg_vide = LNG_UTI_VIDE;
		return parent::Tableau($db, $sql, $champs, $champs, $msg_vide, True);
    }//------------------------------------------------------------------Tableau
    
    
    public static function Select($db, $idexclu=-1)
    {
        $sql="SELECT uti_id, uti_code, CONCAT_WS(', ', uti_nom, uti_prenom) as nom".
            ' FROM utilisateurs'.
            " WHERE uti_id!=$idexclu AND uti_actif=1".
            ' ORDER BY uti_code ASC';
        if ($result = $db->query($sql))
		{
			if ( $result->num_rows<1 )
				return False;
			$retour = Array();
			while ( $row = $result->fetch_assoc() )
				$retour[] = Array (	$row['uti_id'],
									$row['uti_code'].' - '.$row['nom']);
			return $retour;
		}
		return False;
    }
    
    public static function SelectDroits()
    {
		return Array( Array(1,LNG_DRO_LECTEUR), Array(2,LNG_DRO_UTILISATEUR), Array(3,LNG_DRO_ADMIN) );
    }

    public static function Code2Id($db,$code)
    {
		$sql="SELECT uti_id FROM utilisateurs WHERE uti_code='$code'";
        if ($result = $db->query($sql))
		{
			if ( $result->num_rows<1 )
				return False;
			$row = $result->fetch_assoc();
			return $row['uti_id'];
		}
		return False;
	}
	
	
	public static function Mailing($db, $id){
		return parent::Mailing($db, $id, 'utilisateurs');	
	}


}//*****************************************************************Utilisateurs


class Utilisateur extends Enregistrement//**************************************
{ 
	// Constructeur
	function __construct($db)//-------------------------------------------------
	{
		$this->defaut = Array('uti_id' 		=> -1,
						'uti_nom' 		=> '',
						'uti_prenom'	=> '',
						'uti_email'		=> '',
						'uti_code'		=> '',
						'uti_niveau'	=> NIV_LECT,
						'uti_actif'		=> 1);						
		parent::__construct($db, 'utilisateurs', 'uti_id');
	}//--------------------------------------------------------------__construct

	// Verification des attributs via la base
	function Verification()//---------------------------------------------------
	{
		// Verif des champs obligatoires 
		$this->erreurs['uti_nom'] = ( $this->attribut['uti_nom']==='' ) ? LNG_CHAMP_OBLIGATOIRE:'';
		$this->erreurs['uti_prenom'] = ( $this->attribut['uti_prenom']==='' ) ? LNG_CHAMP_OBLIGATOIRE:'';
		// Verif de l'unicité du code
		$this->erreurs['uti_code'] = '';
		if ( trim($this->attribut['uti_code']) == '' )
			$this->erreurs['uti_code'] = LNG_CHAMP_OBLIGATOIRE;
		else
		{
			$sql = 'SELECT uti_id'
				.' FROM utilisateurs'
				." WHERE uti_code='{$this->attribut['uti_code']}' AND uti_id!={$this->attribut['uti_id']}";
			if ( $result = $this->db->query($sql) )
			{
				if ( ($this->attribut['uti_id']==-1 && $result->num_rows>0) || ($this->attribut['uti_id']!=-1 && $result->num_rows>0) )
					$this->erreurs['uti_code'] .= LNG_ZON_CODEEXISTANT;
			}
		}
		$this->erreurs['uti_email'] = '';
		$this->erreurs['uti_niveau'] = '';		
		return $this->erreurs;
	}//-------------------------------------------------------------Verification

	// Ecrit les données dans la base
    function Ecrire(){
		echo $this->id;
		$nouveau = ($this->id == -1 );
		$ok = parent::Ecrire();
		if ($ok AND $nouveau)
			ChangerMdp($this->Attribut['uti_nom']);
		return $ok;
	}

    
    function Supprimer($remplacant)
    {
		Clients::UpdateUti($this->db, $this->attribut['uti_id'], $remplacant); 
		$sql = "UPDATE utilisateurs SET uti_actif=0 WHERE uti_id={$this->id}";
		return ( $result = $this->db->query($sql) );
    }
    
    function ChangerMdp($mdp)
    {
		$sql = "UPDATE utilisateurs SET uti_motdepasse=SHA1('$mdp') WHERE uti_id={$this->id}";
		return ( $result = $this->db->query($sql) );
    }

	function NomFormat()
	{
		return parent::NomFormat('uti_nom', 'uti_prenom');
	}

	function Traitement(&$erreur)//-----------------------------------------------------
	{
		if ( isset( $_POST['maj_infos'] ) )
		{
			$this->LirePost();
			$this->Verification();
			if ( $this->VerifOk() )
				if ( $this->Ecrire() )
				{
					$_SESSION[SES_STATUT] = LNG_STA_MAJ_0;
					$id = $this->cle();
				}
				else
					$_SESSION[SES_STATUT] = LNG_STA_ERREUR.LNG_STA_MAJ_1;
		}
		// Changement du mot de passe
		elseif ( isset( $_POST['maj_pwd'] ) )
		{
			if ( empty( $_POST['motdepasse'] ) )
				$erreur['motdepasse'] = LNG_CHAMP_OBLIGATOIRE;
			else
			{
				if ( !mdp_valide( $_POST['motdepasse'] ) )
					$erreur['motdepasse'] = LNG_MDP_VALIDE;
				else
				{
					if (empty( $_POST['motdepasse2'] ) )
						$erreur['motdepasse2'] = LNG_CHAMP_OBLIGATOIRE;
				}
			}
			if ( implode('',$erreur) == '' )
				if ( $_POST['motdepasse'] != $_POST['motdepasse2'] )
					$erreur['motdepasse2'] = LNG_MDP_CORRESPONDANCE;
			if ( implode('',$erreur) == '' )
				if ( $uti->ChangerMdp($_POST['motdepasse']) )
					$_SESSION[SES_STATUT] = LNG_STA_UTI_MDP_0;
				else
					$_SESSION[SES_STATUT] = LNG_STA_ERREUR.LNG_STA_UTI_MDP_1;
		}
		// Suppression de l'utilisateur
		elseif ( isset( $_POST['maj_sup'] ) )
		{
			if ( isset( $_POST['confirmation'] ) )
				if ($_POST['remplacant']==-1)
				{
					$erreur['remplacant'] = LNG_UTI_REMPLACANT_AIDE;
				}
				else
					if ( $this->Supprimer($_POST['remplacant']) )
					{
						$_SESSION[SES_STATUT] = LNG_STA_UTI_SUP_0;
						header('location:utilisateurs.php');
					}
					else
						$_SESSION[SES_STATUT] = LNG_STA_ERREUR.LNG_STA_UTI_SUP_1;
			else
				$erreur['confirmation'] = LNG_UTI_CONFIRMATION_AIDE;
		}		
	}//-------------------------------------------------------------------------
	

	function Contenu($erreur,$onglet=0, $edition=False)//-----------------------------
	{
		switch ($onglet)
		{
			case 0:
				$h4 = LNG_H4_INFORMATIONS;
				if ( droit_modifier(GR_UTI_MODIF, $edition) )
					$h4 .= Liens::UtiModifier($this->cle());
				?>
				<form method='post' action='utilisateur.php?<?="id={$this->cle()}&amp;edition=$edition"?>'>
				<?php
						dohtml_h4($h4);
						$this->ChampText('uti_nom', $edition);
						$this->ChampText('uti_prenom', $edition);
						$this->ChampText('uti_code', $edition);
						$this->ChampText('uti_email', $edition);
						$this->ChampSelect('uti_niveau', $edition);
						if ($edition)
							dohtml_formbouton('labelagauche', 'Mettre à jour', 'maj_infos', 'Annuler');
				?>
				</form>

				<?php
				// Changement de mdp si l'utilisateur consulte sa propre fiche
				if ($this->cle() === $_SESSION[SES_USER_ID])
				{
				?>

				<form method='post' action='utilisateur.php?<?="id={$this->cle()}&amp;edition=$edition"?>'>

				<?php	
						dohtml_h4(LNG_H4_MAJMDP);
						dohtml_formpass('labelagauche',
										'motdepasse',
										LNG_UTI_MOTDEPASSE,
										LNG_UTI_MOTDEPASSE_AIDE,
										$erreur['motdepasse']);
						dohtml_formpass('labelagauche',
										'motdepasse2',
										LNG_UTI_MOTDEPASSE2,
										LNG_UTI_MOTDEPASSE2_AIDE,
										$erreur['motdepasse2']);
						dohtml_formbouton('labelagauche', 'Mettre à jour', 'maj_pwd');
				?>

				</form>

				<?php
				}
				if ($this->cle() != -1 && $this->cle() != $_SESSION[SES_USER_ID] && $_SESSION[SES_USER_NIVEAU]>=GR_UTI_SUPPR)
				{
				?>

				<form method='post' action='utilisateur.php?<?="id={$this->cle()}&amp;edition=$edition"?>'>

				<?php	
						dohtml_h4(LNG_H4_SUPPRESSION);
						dohtml_formcheck('labelagauche',
										'confirmation',
										LNG_UTI_CONFIRMATION,
										LNG_UTI_CONFIRMATION_AIDE,
										$erreur['confirmation']);
						dohtml_formselect('labelagauche',
										'remplacant',
										LNG_UTI_REMPLACANT,
										LNG_UTI_REMPLACANT_AIDE,
										utilisateurs::select($this->db, $this->attribut['uti_id']),
										True,
										-1,
										$erreur['remplacant']);
						dohtml_formbouton('labelagauche', 'Supprimer', 'maj_sup');
				?>
				</form>

				<?php
				}			
				break;
			case 1:
				Clients::Tableau_uti($this->db, $this->cle());
				break;
			default:
				
		}
	}//-------------------------------------------------------------------------

	function InitErreur($onglet)
	{
		switch ($onglet)
		{
			case 0:
				return Array(	'motdepasse' 	=> '',
									'motdepasse2'	=> '',
									'confirmation'	=> '',
									'remplacant'	=> '');				
				break;
			default:
				
		}		
	}
}//******************************************************************Utilisateur
?>
